/**
 * @file   Point.h
 * @author ubuntu <dadi@ubuntu>
 * @date   Mon Jun 14 20:56:31 2021
 * 
 * @brief  A point.
 * 
 * 
 */

#ifndef __DADI_POINT__
#define __DADI_POINT__

#include "Geometry.h"
#include<initializer_list>

#define TEMPLATE template <size_t DIM, typename T>

TEMPLATE class Point;

TEMPLATE
class Point : public std::valarray<T>, public Geometry
{
public:
    /** 
     * Default constructor.
     * 
     * 
     * @return 
     */
    Point();
    /** 
     * Initializer.
     * 
     * @param _com_list 
     * 
     * @return 
     */
    Point(const std::initializer_list<T> _com_list);
};

TEMPLATE
Point<DIM, T>::Point() : std::valarray<T>(DIM), Geometry()
{
    vertex.resize(1);
    boundary.resize(1);
    neighbor.resize(0);
    dofs.resize(1);
};

TEMPLATE
Point<DIM, T>:: Point(const std::initializer_list<T> _com_list) : std::valarray<T>(_com_list), Geometry()
{
};

#undef TEMPLATE
#else
//DO NOTHING.
#endif
